package day01;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 给定一个字符串，对该字符串可以进行 “移位” 的操作，也就是将字符串中每个字母都变为其在字母表中后续的字母，比如："abc" -> "bcd"。这样，我们可以持续进行 “移位” 操作，从而生成如下移位序列：
 *
 * "abc" -> "bcd" -> ... -> "xyz"
 * 给定一个包含仅小写字母字符串的列表，将该列表中所有满足“移位” 操作规律的组合进行分组并返回。
 *
 *
 *
 * 示例：
 *
 * 输入：["abc", "bcd", "acef", "xyz", "az", "ba", "a", "z"]
 * 输出：
 * [
 *   ["abc","bcd","xyz"],
 *   ["az","ba"],
 *   ["acef"],
 *   ["a","z"]
 * ]
 * 解释：可以认为字母表首尾相接，所以 'z' 的后续为 'a'，所以 ["az","ba"] 也满足 “移位” 操作规律。
 *
 *
 *
 *
 *
 */
public class Solution4 {
    public List<List<String>> groupStrings(String[] strings) {
        Map<String,List<String>> map = new HashMap<>();
        for (String string : strings) {
            char[] chars = string.toCharArray();
            int path = 'z'-chars[chars.length-1];
            StringBuilder str = new StringBuilder();
            for (int i = 0; i < chars.length; i++) {
                char ch = (char) (chars[i]+path);
                if(ch>'z'){
                    ch = (char) (ch-26);
                }
                str.append(ch);
            }
            String s = str.toString();
            List<String> orDefault = map.getOrDefault(s, new ArrayList<>());
            orDefault.add(string);
            map.put(s,orDefault);
        }
        return new ArrayList<>(map.values());
    }
}
